﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>脚本性能 | AutoHotkey v2</title>
<meta name="description" content="Learn how to maximize the performance of a script and which internal optimizations are processed in favor of performance." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>

<body>
<h1>脚本性能</h1>

<p>根据脚本的内容下面的函数可能会影响性能: <a href="../commands/SendMode.htm">发送模式</a>, <a href="../commands/SetKeyDelay.htm">设置按键延迟</a>, <a href="../commands/SetMouseDelay.htm">设置鼠标延迟</a>, <a href="../commands/SetWinDelay.htm">设置窗口延迟</a>, <a href="../commands/SetControlDelay.htm">设置控件延迟</a> 和 <a href="../commands/SetDefaultMouseSpeed.htm">设置默认鼠标速度</a>.</p>
<h2><strong>内置性能特性</strong></h2>
<p>每个脚本在加载和语法检查的同时, 都会进行半编译. 除了能及早发现一些错误, 还能大大提升运行时的性能.</p>
<p>下面是优化过程(半编译) 的一些技术细节:</p>
<ul>
  <li><a href="../commands/Loop.htm">循环</a>, <a href="../commands/Block.htm">block</a>, <a href="../commands/If.htm">如果</a>, <a href="../commands/Else.htm">否则</a> 和其他<a href="../Language.htm#control-flow">控制流语句</a>在脚本中被赋予相关跳点的内存地址.</li>
  <li>每个语句名都由跳转表中的地址代替.</li>
  <li>每个<a href="../Variables.htm#Expressions">表达式</a>都被标记化并从 infix 转换为 postfix.</li>
  <li>对<a href="../Variables.htm">变量</a>或<a href="../Functions.htm">函数</a>的每个引用都会被解析为一个内存地址, 除非它是<a href="../Variables.htm#ref">动态的</a>.</li>
  <li>表达式中的原义整数被替换为二进制整数.</li>
  <li>每一个 <a href="../commands/Goto.htm">跳转</a> 的目标都会被解析为一个内存地址, 除非它是一个变量.</li>
</ul>
<p>此外, 在脚本执行过程中, 二进制数字被缓存在变量中, 以避免从字符串到/从字符串的转换.</p>
</body>
</html>